/**
 * @file log_modules.h
 * @brief 日志模块命名规范定义 - 面向数据解析优化
 * 
 * 统一定义系统中所有模块的日志标识符，专门针对后期日志解析和数据提取进行优化。
 * 
 * 设计原则：
 * 1. 模块名采用分层结构：类别_功能_子功能
 * 2. 使用固定长度（8字符），便于解析软件按列提取
 * 3. 采用英文缩写，避免编码问题
 * 4. 按功能分组，便于批量过滤和统计
 * 5. 预留扩展空间，支持未来功能添加
 * 
 * @author 伞控无人机项目组
 * @date 2024
 */

#ifndef LOG_MODULES_H
#define LOG_MODULES_H

// ============================================================================
// 模块命名规范说明
// ============================================================================
/*
命名格式：XXXX_YYY 或 XXXX_Y_Z（总长度8字符，不足补空格）
- XXXX: 主要功能类别（4字符）
- YYY:  具体功能模块（3字符）
- Y_Z:  功能_子功能（各1字符）

主要类别代码：
- CORE: 系统核心功能
- COMM: 通信相关功能  
- SENS: 传感器相关功能
- CTRL: 控制相关功能
- DATA: 数据处理功能
- SERV: 服务相关功能
- UTIL: 工具辅助功能
*/

// ============================================================================
// 系统核心模块 (CORE_xxx)
// ============================================================================
#define LOG_MODULE_MAIN         "CORE_MAN"      // 主程序管理
#define LOG_MODULE_LOG          "CORE_LOG"      // 日志系统
#define LOG_MODULE_MSGQ         "CORE_MSG"      // 消息队列
#define LOG_MODULE_GPIO         "CORE_GPIO"     // GPIO控制
#define LOG_MODULE_CONFIG       "CORE_CFG"      // 配置管理
#define LOG_MODULE_INIT         "CORE_INI"      // 系统初始化
#define LOG_MODULE_EXIT         "CORE_EXT"      // 系统退出

// ============================================================================
// 通信模块 (COMM_xxx)
// ============================================================================
#define LOG_MODULE_WIFI         "COMM_WIF"      // WiFi管理 (线程1)
#define LOG_MODULE_TCP          "COMM_TCP"      // TCP服务器 (线程2)
#define LOG_MODULE_CAN          "COMM_CAN"      // CAN总线通信 (线程3)
#define LOG_MODULE_RS232        "COMM_232"      // RS232串口通信 (线程6)
#define LOG_MODULE_RS485        "COMM_485"      // RS485通信 (线程9)
#define LOG_MODULE_UDP          "COMM_UDP"      // UDP通信
#define LOG_MODULE_ETH          "COMM_ETH"      // 以太网通信

// ============================================================================
// 传感器模块 (SENS_xxx) - 按传感器类型细分
// ============================================================================
// 位置和导航传感器
#define LOG_MODULE_NAV          "SENS_NAV"      // 组合导航系统 (线程8)
#define LOG_MODULE_GPS          "SENS_GPS"      // GPS定位数据
#define LOG_MODULE_IMU          "SENS_IMU"      // IMU惯性测量
#define LOG_MODULE_MAG          "SENS_MAG"      // 磁力计数据
#define LOG_MODULE_BARO         "SENS_BAR"      // 气压计数据

// 环境传感器
#define LOG_MODULE_WIND         "SENS_WND"      // 风速风向传感器
#define LOG_MODULE_TEMP         "SENS_TMP"      // 温湿度传感器
#define LOG_MODULE_LIGHT        "SENS_LIT"      // 光照传感器

// 机械传感器
#define LOG_MODULE_FORCE        "SENS_FRC"      // 拉力传感器
#define LOG_MODULE_PROX1        "SENS_PR1"      // 接近传感器1 (线程4)
#define LOG_MODULE_PROX2        "SENS_PR2"      // 接近传感器2 (线程5)
#define LOG_MODULE_ACCEL        "SENS_ACC"      // 加速度传感器
#define LOG_MODULE_GYRO         "SENS_GYR"      // 陀螺仪传感器
#define LOG_MODULE_SENSOR       "SENS_COL"      // 传感器数据采集 (线程10)

// ============================================================================
// 控制模块 (CTRL_xxx) - 按控制对象分类
// ============================================================================
#define LOG_MODULE_FLIGHT       "CTRL_FLT"      // 飞行控制
#define LOG_MODULE_MOTOR        "CTRL_MOT"      // 电机控制 (线程7)
#define LOG_MODULE_SERVO        "CTRL_SRV"      // 舵机控制
#define LOG_MODULE_PARA         "CTRL_PAR"      // 降落伞控制
#define LOG_MODULE_LAND         "CTRL_LND"      // 着陆控制
#define LOG_MODULE_STAB         "CTRL_STB"      // 稳定控制
#define LOG_MODULE_GUIDE        "CTRL_GID"      // 制导控制

// ============================================================================
// 数据处理模块 (DATA_xxx) - 按处理类型分类
// ============================================================================
#define LOG_MODULE_PROC         "DATA_PRC"      // 数据处理主模块
#define LOG_MODULE_FILTER       "DATA_FLT"      // 数据滤波
#define LOG_MODULE_FUSION       "DATA_FUS"      // 数据融合
#define LOG_MODULE_CALC         "DATA_CAL"      // 数学计算
#define LOG_MODULE_INTERP       "DATA_INT"      // 数据插值
#define LOG_MODULE_VALID        "DATA_VAL"      // 数据验证
#define LOG_MODULE_CALIB        "DATA_CAB"      // 数据校准

// ============================================================================
// 服务模块 (SERV_xxx) - 按服务类型分类
// ============================================================================
#define LOG_MODULE_LOGSVC       "SERV_LOG"      // 日志服务 (线程10)
#define LOG_MODULE_MONITOR      "SERV_MON"      // 系统监控
#define LOG_MODULE_HEALTH       "SERV_HLT"      // 健康检查
#define LOG_MODULE_WATCHDOG     "SERV_WDG"      // 看门狗服务
#define LOG_MODULE_TIMER        "SERV_TMR"      // 定时器服务
#define LOG_MODULE_SCHEDULE     "SERV_SCH"      // 调度服务

// ============================================================================
// 工具辅助模块 (UTIL_xxx)
// ============================================================================
#define LOG_MODULE_UTIL         "UTIL_CMN"      // 通用工具
#define LOG_MODULE_DEBUG        "UTIL_DBG"      // 调试工具
#define LOG_MODULE_TEST         "UTIL_TST"      // 测试工具
#define LOG_MODULE_FILE         "UTIL_FIL"      // 文件操作
#define LOG_MODULE_MATH         "UTIL_MTH"      // 数学工具
#define LOG_MODULE_STRING       "UTIL_STR"      // 字符串工具
#define LOG_MODULE_TIME         "UTIL_TIM"      // 时间工具

// ============================================================================
// 兼容性定义 (逐步迁移用)
// ============================================================================
// 保持与现有代码的兼容性，逐步迁移到新的命名规范

// 线程模块兼容性定义
#define THREAD1_MODULE          LOG_MODULE_WIFI     // "WiFi管理" -> "COMM_WIF"
#define THREAD2_MODULE          LOG_MODULE_TCP      // "TCP服务器" -> "COMM_TCP"
#define THREAD3_MODULE_NAME     LOG_MODULE_CAN      // "CAN通信" -> "COMM_CAN"
#define THREAD4_MODULE          LOG_MODULE_PROX1    // "接近传感器" -> "SENS_PR1"
#define THREAD5_MODULE          LOG_MODULE_PROX2    // "接近传感器2" -> "SENS_PR2"
#define THREAD6_MODULE          LOG_MODULE_RS232    // "串口通信" -> "COMM_232"
#define THREAD7_MODULE          LOG_MODULE_MOTOR    // "电机通信" -> "CTRL_MOT"
#define THREAD8_MODULE          LOG_MODULE_NAV      // "组合导航" -> "SENS_NAV"
#define THREAD9_MODULE          LOG_MODULE_RS485    // RS485通信 -> "COMM_485"
#define THREAD10_MODULE         LOG_MODULE_SENSOR   // 传感器数据采集 -> "SENS_COL"

// 其他模块兼容性定义
#define MSG_QUEUE_MODULE        LOG_MODULE_MSGQ     // "消息队列" -> "CORE_MSG"
#define GPIO_MODULE_NAME        LOG_MODULE_GPIO     // "GPIO" -> "CORE_GPIO"

// ============================================================================
// 数据类型标识 (用于日志解析软件识别数据类型)
// ============================================================================

// 传感器数据类型标识
#define LOG_DATA_GPS_POS        "GPS_POS"       // GPS位置数据
#define LOG_DATA_GPS_VEL        "GPS_VEL"       // GPS速度数据
#define LOG_DATA_IMU_ATT        "IMU_ATT"       // IMU姿态数据
#define LOG_DATA_IMU_ACC        "IMU_ACC"       // IMU加速度数据
#define LOG_DATA_IMU_GYR        "IMU_GYR"       // IMU角速度数据
#define LOG_DATA_WIND_SPD       "WND_SPD"       // 风速数据
#define LOG_DATA_WIND_DIR       "WND_DIR"       // 风向数据
#define LOG_DATA_TEMP_VAL       "TMP_VAL"       // 温度数据
#define LOG_DATA_HUMID_VAL      "HMD_VAL"       // 湿度数据
#define LOG_DATA_FORCE_VAL      "FRC_VAL"       // 拉力数据
#define LOG_DATA_PROX_DIST      "PRX_DST"       // 接近距离数据

// 控制指令类型标识
#define LOG_CMD_MOTOR_SPD       "MOT_SPD"       // 电机速度指令
#define LOG_CMD_SERVO_ANG       "SRV_ANG"       // 舵机角度指令
#define LOG_CMD_PARA_REL        "PAR_REL"       // 降落伞释放指令
#define LOG_CMD_FLIGHT_MODE     "FLT_MOD"       // 飞行模式指令

// 状态信息类型标识
#define LOG_STATE_SYS_STAT      "SYS_STA"       // 系统状态
#define LOG_STATE_CONN_STAT     "CON_STA"       // 连接状态
#define LOG_STATE_SENS_STAT     "SEN_STA"       // 传感器状态
#define LOG_STATE_CTRL_STAT     "CTL_STA"       // 控制状态

// ============================================================================
// 日志解析辅助宏定义
// ============================================================================

// 标准化的数据记录宏（便于解析软件识别）
#define LOG_DATA_RECORD(module, data_type, format, ...) \
    LOG_INFO(LOG_TO_FILE, module, "[" data_type "] " format, ##__VA_ARGS__)

#define LOG_CMD_RECORD(module, cmd_type, format, ...) \
    LOG_INFO(LOG_TO_FILE, module, "[" cmd_type "] " format, ##__VA_ARGS__)

#define LOG_STATE_RECORD(module, state_type, format, ...) \
    LOG_INFO(LOG_TO_FILE, module, "[" state_type "] " format, ##__VA_ARGS__)

// 性能统计记录宏
#define LOG_PERF_RECORD(module, metric_name, value, unit) \
    LOG_INFO(LOG_TO_FILE, module, "[PERF] " metric_name "=%.3f%s", (double)(value), unit)

// 错误统计记录宏
#define LOG_ERROR_STAT(module, error_type, count) \
    LOG_WARN(LOG_TO_FILE, module, "[ERR_STAT] " error_type "_count=%d", count)

// ============================================================================
// 使用示例和最佳实践
// ============================================================================

/*
标准化数据记录示例（便于后期解析）：

1. 传感器数据记录：
   LOG_DATA_RECORD(LOG_MODULE_GPS, LOG_DATA_GPS_POS, "lat=%.8f,lon=%.8f,alt=%.2f", lat, lon, alt);
   LOG_DATA_RECORD(LOG_MODULE_IMU, LOG_DATA_IMU_ATT, "roll=%.3f,pitch=%.3f,yaw=%.3f", r, p, y);
   LOG_DATA_RECORD(LOG_MODULE_WIND, LOG_DATA_WIND_SPD, "speed=%.2f", wind_speed);
   LOG_DATA_RECORD(LOG_MODULE_WIND, LOG_DATA_WIND_DIR, "direction=%.1f", wind_dir);
   LOG_DATA_RECORD(LOG_MODULE_TEMP, LOG_DATA_TEMP_VAL, "temperature=%.1f", temp);
   LOG_DATA_RECORD(LOG_MODULE_TEMP, LOG_DATA_HUMID_VAL, "humidity=%.1f", humidity);

2. 控制指令记录：
   LOG_CMD_RECORD(LOG_MODULE_MOTOR, LOG_CMD_MOTOR_SPD, "motor_id=%d,speed=%d", id, speed);
   LOG_CMD_RECORD(LOG_MODULE_SERVO, LOG_CMD_SERVO_ANG, "servo_id=%d,angle=%.1f", id, angle);
   LOG_CMD_RECORD(LOG_MODULE_PARA, LOG_CMD_PARA_REL, "release_cmd=1");

3. 状态信息记录：
   LOG_STATE_RECORD(LOG_MODULE_MAIN, LOG_STATE_SYS_STAT, "status=running,uptime=%d", uptime);
   LOG_STATE_RECORD(LOG_MODULE_TCP, LOG_STATE_CONN_STAT, "clients=%d,active=%d", total, active);

4. 性能统计记录：
   LOG_PERF_RECORD(LOG_MODULE_NAV, "update_rate", update_hz, "Hz");
   LOG_PERF_RECORD(LOG_MODULE_PROC, "process_time", proc_ms, "ms");
   LOG_PERF_RECORD(LOG_MODULE_COMM_CAN, "throughput", bytes_per_sec, "B/s");

5. 错误统计记录：
   LOG_ERROR_STAT(LOG_MODULE_GPS, "timeout", timeout_count);
   LOG_ERROR_STAT(LOG_MODULE_CAN, "frame_error", error_count);

日志解析软件可以通过以下模式进行数据提取：
- 按模块过滤：grep "SENS_GPS" logfile.txt
- 按数据类型过滤：grep "\[GPS_POS\]" logfile.txt  
- 按时间范围过滤：awk '/2024-01-01 10:00:00/,/2024-01-01 11:00:00/' logfile.txt
- 提取特定数值：grep -o "speed=[0-9.]*" logfile.txt
- 统计错误次数：grep -c "\[ERR_STAT\]" logfile.txt

命名规范优势：
1. 固定8字符长度，便于列对齐和解析
2. 分层结构清晰，便于分类统计
3. 英文缩写避免编码问题
4. 数据类型标识便于自动化处理
5. 标准化格式便于批量解析
*/

#endif /* LOG_MODULES_H */ 